home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 015 / prselect.arc / PRSELECT.ASM next >
Assembly Source File  |  1986-01-25  |  2KB  |  78 lines

  1. ;Program PRSELECT.ASM
  2. ;Memory resident.  Allows you to switch LPT1:
  3. ;and LPT2: by pressing Ctrl, Alt and one of
  4. ;the shift keys
  5. ;
  6. ;By Jim Dexter
  7. ;   2400 Westmont Way West
  8. ;   Seattle, WA  98199
  9. ;   (206) 285-3039
  10. ;
  11. base    segment at 0
  12.         org     24h
  13. st1     dw      ?               ;Address of
  14. st2     dw      ?               ;keyboard interrupt
  15. base    ends
  16. data    segment at 40h
  17.         dw      4 dup (?)
  18. pr1     dw      ?               ;Port for lpt1
  19. pr2     dw      ?               ;Port for lpt2
  20. data    ends
  21. swappr segment
  22. assume cs:swappr
  23.         org     100h
  24. get_ports:
  25.         mov     ax,40h          ;Find printer ports
  26.         mov     ds,ax           ;and store them
  27.         mov     ax,ds:pr1
  28.         mov     cs:lpt1,ax
  29.         mov     ax,ds:pr2
  30.         mov     cs:lpt2,ax
  31. patch_dos:
  32.         mov     dx,offset endup ;Add memory resident
  33.         mov     ax,0            ;portion of program 
  34.         mov     ds,ax           ;to DOS
  35.         mov     ax,ds:st1
  36.         mov     cs:st1a,ax
  37.         mov     ax,ds:st2
  38.         mov     cs:st2a,ax
  39.         mov     ax,offset startit
  40.         mov     ds:st1,ax
  41.         mov     ax,cs
  42.         mov     ds:st2,ax
  43.         int     27h
  44. startit:
  45.         push    ax              ;This routine is now 
  46.         push    ds              ;called each time 
  47.         mov     ax,40h          ;interrupt 9 is called
  48.         mov     ds,ax
  49.         mov     al,ds:[17h]     ;Get status of keys
  50.         and     al,0fh
  51.         cmp     al,0eh
  52.         jz      l_shift         ;Jump if control, 
  53.         cmp     al,0dh          ;alternate and a
  54.         jz      r_shift         ;shift key are pressed
  55.         jmp     goback          ;otherwise return 
  56. l_shift:
  57.         mov     ax,cs:lpt1      ;Set LPT1: and LPT2:
  58.         mov     ds:pr1,ax       ;to original settings
  59.         mov     ax,cs:lpt2
  60.         mov     ds:pr2,ax
  61.         jmp     goback
  62. r_shift:
  63.         mov     ax,cs:lpt2      ;Set LPT1: and LPT2:
  64.         mov     ds:pr1,ax       ;to reversed settings
  65.         mov     ax,cs:lpt1
  66.         mov     ds:pr2,ax
  67. goback:                         ;Return to normal routine for
  68.         pop     ds              ;interrupt 9
  69.         pop     ax
  70.         db      0eah            ;This creates a jump statement
  71. st1a    dw      ?               ;back to ROM BIOS
  72. st2a    dw      ?
  73. lpt1    dw      ?
  74. lpt2    dw      ?
  75. endup   dw      ?
  76. swappr ends
  77.         end     get_ports
  78.